home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-06-24 | 9.2 KB | 252 lines | [TEXT/Help] |
- {differences avec v 1.5: Fonctions en assembleur}
-
- (warn ƒ
-
- (define (just l)
- (warn () (raz))
- (let [(ls&ns (creer…ls&ns l 0))]
- (define *ts* (apply cell (0 ls&ns)))
- (define *ns* (1 ls&ns))
- (just…*tc* l)))
-
- (define (just…*tc* l)
- (let [(lc&nsmax (creer…lc&nsmax l *ns* 'dk))]
- (define *tc* (apply cell (0 lc&nsmax)))
- (define *nc* (1- (blength *tc*)))
- (define *nsmax* (1 lc&nsmax))
- (just…*tc/s&*tc/nxx* l)))
-
- (define (just…*tc/s&*tc/nxx* l)
- (letrec [((init…tc/s i t)
- (cond (>? i *ns*) t
- (begin (cell=! t i (cell (makebitarray *nc*)(makebitarray *nc*)))
- (init…tc/s (1+ i) t))))
- ((init…tc/nxx i t)
- (cond (>? i *nsmax*) t
- (begin (cell=! t i (makebitarray *nc*))
- (init…tc/nxx (1+ i) t))))
- (tc/s&tc/nxx (creer…tc/s&tc/nxx (init…tc/s 0 (makecell (1+ *ns*) 0))
- (init…tc/nxx 0 (makecell (+ *nsmax* 1) 0))
- (init…tc/nxx 0 (makecell (+ *nsmax* 1) 0))
- *tc*))
- (tc…s-> (bitand (1 (1 tc/s&tc/nxx)) (0 (2 tc/s&tc/nxx))))
- (tc…->s (bitand (0 (1 tc/s&tc/nxx)) (1 (2 tc/s&tc/nxx))))]
- (define *tc/s* (0 tc/s&tc/nxx))
- (define *msk* (bitnot! (makebitarray *nc*)))
- (define *a->b* (avancer! pg *tc/s* *tc* (trouver…ts! *tc* tc…->s pd)
- (1 tc/s&tc/nxx) (2 tc/s&tc/nxx) *msk*
- (avancer! pd *tc/s* *tc* (trouver…ts! *tc* tc…s-> pg)
- (1 tc/s&tc/nxx) (2 tc/s&tc/nxx) *msk*
- (cell (makebitarray *ns*) (makebitarray *ns*)))))
- (define *tc/nsg* (1 tc/s&tc/nxx))
- (define *tc/nsd* (2 tc/s&tc/nxx))))
-
- (define (creer…ls&ns lc n)
- (cond (null? lc) (cell () n)
- (letrec [((loop ls n l&n)
- (cond (null? ls) (cell n l&n)
- (let [(s (intern 'dk (0 ls)))]
- (cond (warn () (error? (binding=? s ())))
- (begin (binding=! s () n)
- (let [(etc (loop (-1 ls) (1+ n) l&n))]
- (cell (0 etc) (cell (cons (0 ls) (0 (1 etc))) (1 (1 etc))))))
- (loop (-1 ls) n l&n)))))
- (respg (loop (pg (0 lc)) n
- (letrec [(respd (loop (pd (0 lc)) (0 respg)
- (creer…ls&ns (-1 lc) (0 respd))))]
- (1 respd))))]
- (1 respg))))
-
- {••• Traduit une liste de symboles en un vecteur de bits en fonction du package dk}
-
- (defext ":Help Files:ATMS:fo" "traduire" traduire
- (cell 'traduire ())
- %111 l ba dk)
-
- (defext ":Help Files:ATMS:fo" "creer…lc&nsmax" creer…lc&nsmax
- (cell 'creer…lc&nsmax (getcode traduire) () ƒ (getcode bitcount)(getcode bcopy)(getcode bitand!)(getcode bitfind))
- %111 l ns dk)
-
- {••• bitfind et bitclr a la fois, retourne le rang}
-
- (defext ":Help Files:ATMS:fo" "bitfclr!" bitfclr!
- (cell 'bitfclr! ƒ)
- %1 x)
-
- (defext ":Help Files:ATMS:fo" "creer…tc/s&tc/nxx" creer…tc/s&tc/nxx
- (cell 'creer…tc/s&tc/nxx (getcode bitfclr!) () ƒ (getcode BCopy)(getcode BitCount))
- %1111 tc/s tc/nsg tc/nsd tc)
-
- {••• Ajoute une clause dans une liste de clauses sans verification des soussommages
- *tc* se retrouve dans l'ordre par rapport a la liste initiale}
-
- (define consminimal cons)
-
- {••• Affecte ? aux *ns* symboles de *ts* dans le package dk}
-
- (define (raz)
- (cond (warn ƒ (error? *ts*)) †
- (letrec [(ns (1- (blength *ts*)))
- ((loop n)
- (cond (=? n ns) †
- (begin (binding=! (intern 'dk (n *ts*)) () (warn ƒ ?))
- (loop (1+ n)))))]
- (loop 0))))
-
- {••• Extraordinaire barriere d'abstraction: pg partie gauche et pd partie droite}
-
- (define pg 0)
- (define pd 1)
-
- {•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••}
-
- (define (• lhs rhs)
- (letrec
- [(a (traduire lhs (makebitarray *ns*) 'dk))
- (b (traduire rhs (makebitarray *ns*) 'dk))
- (msk (bcopy *msk*))
- (tc/nsg (bcopy *tc/nsg*))
- (tc/nsd (bcopy *tc/nsd*))
- (a->b (avancer! pg *tc/s* *tc* a tc/nsg tc/nsd msk
- (avancer! pd *tc/s* *tc* b tc/nsg tc/nsd msk (ccopy *a->b*))))
- (rangtt (explorer tc/nsg tc/nsd msk))]
- (cond (eq? a->b †) †
- (and (bitfind (0 tc/nsg)) rangtt)
- (prouver…ts (bitmsk (pg (rangtt *tc*)) (pg a->b)) tc/nsg tc/nsd msk a->b *tc/s* *tc*))))
-
- {••• retourne dans res le tas de symboles apparaissant dans la partie goud des clauses de tc}
-
- (defext ":Help Files:ATMS:fo" "trouver…ts!" trouver…ts!
- (cell 'trouver…ts! (getcode BitFClr!)(getcode BitOr!) ƒ ())
- %111 *tc* tc goud)
-
- {•••retourne le rang de la clause de tete entrainant le plus faible facteur de branchement ou ƒ}
-
- (defext ":Help Files:ATMS:fo" "explorer" explorer
- (cell 'explorer (getcode BCopy)(getcode BitAnd!)(getcode BitFind) () ƒ)
- %111 tc/nsg tc/nsd msk)
-
- {••• avance d'un cran les clauses de tc dans tc/nxx}
-
- (defext ":Help Files:ATMS:fo" "avancer!tc" avancer!tc
- (cell 'avancer!tc (getcode BitFind)(getcode BitOr!)(getcode BitAnd!)(getcode BitNot!)(getcode BCopy) ƒ ())
- %11 tc tc/nxx)
-
- {•••reclasse les clauses dans tc/nsg et tc/nsd,
- en avancant dans tc/nsg (tc/nsd) les clauses qui contiennent le symbole a goud d'un cran,
- en mettant a jour le msk ie eteindre les bits des clauses qui contiennent le symbole a doug
- en appelant avancer! a gauche pour les symboles s dans les clauses ->s qui sont ainsi apparues
- en appelant avancer! a droite pour les symboles s dans les clauses s-> qui sont ainsi apparues
- Elle travaille physiquement sur chacun des tableaux et retourne a->b
- L'appeler toujours avec tc=*tc* et tcs=*tc/s*}
-
- (defext ":Help Files:ATMS:fo" "avancer!" avancer!
- (cell 'avancer! (getcode avancer!tc) (getcode bitfclr!)(getcode trouver…ts!)
- † ƒ () (getcode Bitand!)(getcode BitOr!)(getcode BitFind)(getcode BCopy)(getcode BitNot!))
- %11111111111 goud tcs tc ts tc/nsg tc/nsd msk a->b)
-
- {•••prouve les clauses a->gb pour tout g de gamma
- L'appeler toujours avec tc=*tc* et tcs=*tc/s*}
-
- (defext ":Help Files:ATMS:fo" "prouver…ts" prouver…ts
- (cell 'prouver…ts (getcode avancer!)(getcode bitfclr!)(getcode explorer)
- (getcode Print)(getcode BitFind)(getcode BitOr!)(getcode BitAnd!)
- (getcode BitNot!)(getcode BCopy) ƒ () †)
- %1111111 gamma old…tc/nsg old…tc/nsd old…msk old…a->b tcs tc)
-
- {••• un pretty print pour le rang d'une clause}
-
- (define (ppc rang)
- (cond rang (let [(c (rang *tc*))]
- (cell (ppts (pg c)) (ppts (pd c))))
- "Pas de regle"))
-
- {••• un pretty print pour un vecteur de bits representant un ensemble de clauses}
-
- (define (pptc p)
- (letrec [(ba (bcopy p))
- ((loop rang)
- (cond rang (cond (>? rang *nc*) ()
- (cons (ppc rang) (loop (bitfclr! ba))))
- ()))]
- (loop (bitfclr! ba))))
-
- {••• un pretty print pour le rang d'un symbole}
-
- (define (pps rang)
- (cond rang (rang *ts*)
- "Pas de symbole"))
-
- {••• un pretty print pour un vecteur de bits representant un ensemble de symboles}
-
- (define (ppts p)
- (letrec [(ba (bcopy p))
- ((loop rang)
- (cond rang (cons (rang *ts*) (loop (bitfclr! ba)))
- ()))]
- (loop (bitfclr! ba))))
-
- (define (max n | l)
- (cond (null? l) n
- (<? n (0 l)) (apply max l)
- (apply max (cons n (-1 l)))))
-
- (defmacro (bitmsk x y)
- `(bitand! ,x (bitnot! (bcopy ,y))))
-
- (defmacro (bitand x y)
- `(bitand! ,x (bcopy ,y)))
-
- (defmacro (bitor x y)
- `(bitor! ,x (bcopy ,y)))
-
- (defmacro (bitnot x)
- `(bitnot! (bcopy ,x)))
-
- (defmacro (ccopy a->b)
- `(cell (bcopy (pg ,a->b)) (bcopy (pd ,a->b))))
-
- {accede a la valeur d'une forme suspendue si la structure en est simple.
- Attention: Pour un cell, elle n'accede pas a chaque element}
-
- (defmacro (accede | l)
- (cons 'begin (maplist 'null? l)))
-
- {Imprime en sequence par prin les elements de l et retourne la valeur du premier arg}
-
- (defmacro (prinloop val | l)
- `(begin ,@(maplist 'prin l) (flushio stdo) ,val))
-
- {le stepper s'arrete pour les ident de variables, les cons, les fermetures}
-
- (define (step? expr env)
- (or (=? (type expr) 6)
- (=? (type expr) 12)
- (=? (type expr) 13)
- ))
-
- (defmacro (mapause | l)
- `(begin ,@(maplist 'prin l) (flushio stdo) (pause))
- )
-
- (defmacro (mapause | l) ()
- )
-
- (define (maplist f l)
- (cond (null? l) ()
- (cons (list f (0 l)) (maplist f (-1 l)))))
-
- (define (instance pg pd lvar ldom test)
- (letrec [((loopvar lvar ldom)
- (cond (null? lvar) (cond (eval test ()) (prin (cell (eval pg ()) (eval pd ()))))
- (loopval (0 lvar) (0 ldom) (-1 lvar) (-1 ldom))))
- ((loopval var dom lvar ldom)
- (cond (cons? dom) (begin (binding=! var () (0 dom))
- (loopvar lvar ldom)
- (loopval var (-1 dom) lvar ldom))))]
- (loopvar lvar ldom) (flushio stdo)))
-
- (define (inverser l)
- (cond (null? l) ()
- (cons (cell (1 (0 l)) (0 (0 l))) (inverser (-1 l)))))
- )